package com.lucker.service.user;

import java.util.Date;
import java.util.List;

import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang.StringUtils;
import org.springframework.stereotype.Service;

import com.lucker.cds.model.CUserToken;
import com.lucker.common.enums.UserTokenType;
import com.lucker.common.util.UUIDUtils;
import com.lucker.ds.mapper.BaseCustomMapper;
import com.lucker.ds.model.UserToken;
import com.lucker.framework.constant.ClientType;
import com.lucker.framework.exception.BaseServiceException;
import com.lucker.service.BaseServiceImpl;

@Service
public class UserTokenServiceImpl extends BaseServiceImpl<UserToken, CUserToken, Long> implements UserTokenService {
	@Override
	public BaseCustomMapper<CUserToken, Long> getCustomMapper() {
		return null;
	}
	
//	public UserToken reSetUserToken(UserToken userToken) {
//		if(userToken.getUserId() == null || userToken.getUserId() == 0) {
//			throw new BaseServiceException("userId 不能为空!");
//		}
//		
//		if(userToken.getTokenType() == null || userToken.getTokenType() == 0) {
//			throw new BaseServiceException("缺少tokenType");
//		}
//		
//		if(StringUtils.isBlank(userToken.getClienType())) {
//			userToken.setClienType(ClientType.APP);
//		}
//		
//		UserToken _userToken = new UserToken();
//		_userToken.setClienType(userToken.getClienType());
//		_userToken.setTokenType(userToken.getTokenType());
//		_userToken.setUserId(userToken.getUserId());
//		
//		List<UserToken> userTokenList = this.getBaseMapper().selectAll(_userToken);
//		if(CollectionUtils.isEmpty(userTokenList)) {
//			userToken.setUserToken(UUIDUtils.newUUID());
//			userToken.setCreateTime(new Date());
//			this.getBaseMapper().insert(userToken);
//			
//		}else {
//			userToken.setId(userTokenList.get(0).getId());
//			userToken.setUserToken(UUIDUtils.newUUID());
//			this.getBaseMapper().updateByPrimaryKey(userToken);
//		}
//		return userToken;
//		
//	}
	
	
	public UserToken reSetUserToken(Long userId, UserTokenType tokenType ,  String appType) {
		
		if(userId == null || userId == 0) {
			throw new BaseServiceException("userId 不能为空!");
		}
		
		UserToken _userToken = new UserToken();
		if(StringUtils.isBlank(appType)) {
			throw new BaseServiceException("appType 不能为空!");
		}
		_userToken.setClienType(appType);
		_userToken.setTokenType(tokenType.getCode());
		_userToken.setUserId(userId);
		
		if(queryAllCount(_userToken) < 1) {
			_userToken.setUserToken(UUIDUtils.newUUID());
			_userToken.setCreateTime(new Date());
			add(_userToken, false);
			
		}else {
			_userToken.setUserToken(UUIDUtils.newUUID());
			modify(_userToken, false);	
		}
		
		return _userToken;
		
	}
	
	
	
	
	
	
	
	
	//首先从REDIS缓存中获取TOKEN , 如果获取不到则从表中获取一次，这样可以大提高MYSQL使用率.   userToken 必填, userId 非必填, 以下函数为缓存扩展，暂不实现
	public boolean isLoginByCache(UserToken utk) {
		return Boolean.FALSE;
	}
	
	public boolean isLogin(UserToken utk) {
		if(!isLoginByCache(utk)) {
			int utkCount = this.getBaseMapper().selectAllCount(utk);
			if(utkCount == 1) {
				return Boolean.TRUE;
			}
		}
		return Boolean.FALSE;
	}
}
